#include "widget.h"
#include "ui_widget.h"
#include <QDebug>
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    //创建定时器实时显示时间和天气
    timer1 = new QTimer;
    timer2 = new QTimer;
    //当客户端接收到HTTP响应报文的时候，manager网络访问管理者对象 会 自动发射出finished信号，关联槽函数，在槽函数中接收数据
    connect(&manager,&QNetworkAccessManager::finished,this,&Widget::onNetworkReplySlot);
    //关联槽函数
    connect(timer1, &QTimer::timeout, this, &Widget::showDateTimeSlot);
    connect(timer2, &QTimer::timeout, this, &Widget::showWeatherSlot);
    //开启定时器
    timer1->start(1000); // 每秒触发一次，更新时间
    timer2->start(1000*60*30); // 每半个小时触发一次，更新天气
    // 初始化时间显示
    showDateTimeSlot();
    showWeatherSlot();

    //显示景区鸟瞰图
    QPixmap pixmap(":/1.bmp");
    QPixmap scaledPixmap = pixmap.scaled(ui->label->size(), Qt::KeepAspectRatio, Qt::SmoothTransformation);
    ui->label->setPixmap(scaledPixmap);
    // 设置按钮图标
//    ui->btn_pathplanning->setIcon(QIcon(":/pic/navigation1.png"));
//    ui->btn_info->setIcon(QIcon(":/pic/notice.png"));
//    ui->btn_set->setIcon(QIcon(":/pic/set.png"));
    //设置透明按钮
    ui->btn_shopping->setStyleSheet("QPushButton { background: transparent; border: none; }");
    ui->btn_practice->setStyleSheet("QPushButton { background: transparent; border: none; }");
    ui->btn_gymnasium->setStyleSheet("QPushButton { background: transparent; border: none; }");
    ui->btn_5teaching->setStyleSheet("QPushButton { background: transparent; border: none; }");
    ui->btn_lits->setStyleSheet("QPushButton { background: transparent; border: none; }");
    ui->btn_library->setStyleSheet("QPushButton { background: transparent; border: none; }");
    ui->btn_3teaching->setStyleSheet("QPushButton { background: transparent; border: none; }");
    ui->btn_integrated->setStyleSheet("QPushButton { background: transparent; border: none; }");
    ui->btn_art->setStyleSheet("QPushButton { background: transparent; border: none; }");

    //鼠标悬停出现提示
    ui->btn_shopping->setToolTip("仿古商业街");
    ui->btn_practice->setToolTip("实验实训大楼");
    ui->btn_gymnasium->setToolTip("体育馆");
    ui->btn_5teaching->setToolTip("五号教学楼");
    ui->btn_lits->setToolTip("学海悟道");
    ui->btn_library->setToolTip("图书馆");
    ui->btn_3teaching->setToolTip("三号教学楼");
    ui->btn_art->setToolTip("艺体楼");
    ui->btn_integrated->setToolTip("综合楼");
    //将左侧的三个按钮添加到按钮组中  第二个参数 代表 按钮在这个按钮组中的编号
    m_btnGroup.addButton(ui->btn_shopping,1);
    m_btnGroup.addButton(ui->btn_practice,2);
    m_btnGroup.addButton(ui->btn_gymnasium,3);
    m_btnGroup.addButton(ui->btn_5teaching,4);
    m_btnGroup.addButton(ui->btn_lits,5);
    m_btnGroup.addButton(ui->btn_library,6);
    m_btnGroup.addButton(ui->btn_3teaching,7);
    m_btnGroup.addButton(ui->btn_integrated,8);
    m_btnGroup.addButton(ui->btn_art,9);


    //所有按钮都显示同一个对话框
    connect(&m_btnGroup,SIGNAL(buttonClicked(int)),this,SLOT(showDialog(int)));

}
//显示对话框
void Widget::showDialog(int id)
{
    QString content;
    QString picpath = QString(":/pic/%1.jpg").arg(id);
    int m_id = id - 1;
    switch (id) {
                case 1:
                    content = "仿古商业街建筑风格采用了传统的仿古设计，\r\n"
                              "黄色的琉璃瓦屋顶与现代校园建筑形成鲜明对\r\n"
                              "比，营造出古色古香的氛围。";
                    break;
                case 2:
                    content = "实验实训大楼是学校教学和实践的重要组成部\r\n"
                              "分，为学生提供了丰富的实验和实训环境。该\r\n"
                              "大楼配备了包括智能多媒体教室、智慧教学直\r\n"
                              "播录播教室、云桌面机房等在内的现代化教学\r\n设施。";
                    break;
                case 3:
                    content = "体育馆为师生提供了丰富的体育活动和训练场\r\n"
                              "所，该体育馆配备了现代化的体育设施，包括\r\n"
                              "室内外篮球场、羽毛球场、网球场等，满足了\r\n"
                              "不同体育项目的需求。";
                    break;
                case 4:
                    content = "五号教学楼采用了现代化的建筑风格，拥有宽\r\n"
                              "敞明亮的教室和先进的教学设施，如智能多媒\r\n"
                              "体教室等，为师生提供了优质的教学环境。";
                    break;
                case 5:
                    content = "学海悟道石碑是校园内一个具有象征意义的地\r\n"
                              "标，它不仅是一个物理存在，更是学校文化和\r\n"
                              "精神的载体。";
                    break;
                case 6:
                    content = "图书馆是学校重要的学术资源中心，其建筑风\r\n"
                              "格现代，环境优雅，为师生提供了良好的学习\r\n"
                              "和研究环境。";
                    break;
                case 7:
                    content = "三号教学楼外观宏伟壮观，其建筑主体颜色为\r\n"
                              "棕褐色搭配蓝色玻璃装饰，显得庄重而典雅。\r\n"
                              "教学楼前矗立着一座造型独特的雕塑，呈现出\r\n"
                              "一个抽象的“腾飞”造型，寓意着学校对学子们\r\n"
                              "未来发展的美好期许。也象征着学校不断追求\r\n"
                              "卓越精神风貌。";
                    break;
                case 8:
                    content = "综合楼一楼大厅是学校举办各类活动的主要场\r\n"
                              "地，如招聘会、双选会等。综合楼配备了先进\r\n"
                              "的教学设施，为师生提供了良好的教学和学习\r\n环境。";
                    break;
                case 9:
                    content = "艺体楼是学校开展艺术和体育教学活动的重要\r\n"
                              "场所，其建筑外观设计较为现代，内部空间布\r\n"
                              "局合理，功能齐全。";
                    break;
                default:
                    break;
                        }

    //创建一个自定义对话框对象
    msgDiglog = new MyDialog(content,picpath,m_id,this);
    msgDiglog->setAttribute(Qt::WA_DeleteOnClose);//对话框关闭时 会自动销毁对象
    msgDiglog->show();//非模态显示对话框
}

Widget::~Widget()
{
    delete timer1;
    delete timer2;
    //delete msgDiglog;
    delete ui;
}

//实时显示时间
void Widget::showDateTimeSlot()
{
    // 获取当前时间
    QDateTime currentTime = QDateTime::currentDateTime();
    // 获取当前是星期几
    int dayOfWeek = currentTime.date().dayOfWeek();
    // 将星期几的枚举值转换为对应的数字或字符串
    QString dayName;
    switch (dayOfWeek) {
       case Qt::Monday:    dayName = "星期一"; break;
       case Qt::Tuesday:   dayName = "星期二"; break;
       case Qt::Wednesday: dayName = "星期三"; break;
       case Qt::Thursday:  dayName = "星期四"; break;
       case Qt::Friday:    dayName = "星期五"; break;
       case Qt::Saturday:  dayName = "星期六"; break;
       case Qt::Sunday:    dayName = "星期天"; break;
    }

    // 将时间格式化为字符串
    QString timeString = currentTime.toString("yyyy-MM-dd hh:mm:ss")+" "+dayName;
    // 更新标签的文本内容
    ui->label_datetime->setText(timeString);

}
//解析Json数据，获取天气
void Widget::onNetworkReplySlot(QNetworkReply *reply)
{
    //root["forecasts"] == root.value("forecasts")
    if (reply->error() == QNetworkReply::NoError) {
           QByteArray data = reply->readAll();
           QJsonDocument doc = QJsonDocument::fromJson(data);
           if (!doc.isNull() && doc.isObject()) {
               QJsonObject root = doc.object();
               QJsonArray forecasts = root.value("forecasts").toArray();
               if (!forecasts.isEmpty()) {
                   QJsonObject forecast = forecasts[0].toObject();
                   QString city = forecast.value("city").toString();
                   QJsonArray casts = forecast.value("casts").toArray();
                   if (!casts.isEmpty()) {
                       QJsonObject cast = casts[0].toObject();
                       QString date = cast.value("date").toString();
                       QString dayWeather = cast.value("dayweather").toString();
                       QString dayTemp = cast.value("daytemp").toString();
                       QString nightWeather = cast.value("nightweather").toString();
                       QString nightTemp = cast.value("nighttemp").toString();
                        qDebug() << "city:" << city;
                       ui->label_weather->setText(QString("%1  %2  %3°C")
                                             .arg(city,  dayWeather, dayTemp));
                   }
               }
           }
       } else {
           ui->label_weather->setText("Failed to load weather data: " + reply->errorString());
       }
       reply->deleteLater();
}
//实时显示天气
void Widget::showWeatherSlot()
{
    //1、定义一个HTTP请求报文对象
    //广州从化区城市编码440117，南昌市城市编码360100，南昌市青山湖区城市编码360102
    QUrl url("https://restapi.amap.com/v3/weather/weatherInfo?key=54a8a4ffd84317cd20c531f662d01619&city=360111&extensions=all");
    QNetworkRequest request(url);
    //2.发送
    manager.get(request);
}

//路径规划功能，进入导航界面
void Widget::on_btn_pathplanning_clicked()
{
    //第一步：创建另一个界面的对象
    PathplanMW *Pathplan = new PathplanMW(this);
    Pathplan->setAttribute(Qt::WA_DeleteOnClose);//关闭之后自动销毁对象
    //第二步：显示要跳转的界面
    Pathplan->show();
    //第三步：关闭当前的界面,跳转到另一个界面之后，就不能返回原来的界面了
    this->hide();
}
//设置按钮
void Widget::on_btn_set_clicked()
{
    //第一步：创建另一个界面的对象
    // new MainWindow 说明创建新界面对象跟当前界面没有关联，不记录它是从哪个界面跳转而来
    SettingMW *setting = new SettingMW(this);
    setting->setAttribute(Qt::WA_DeleteOnClose);//关闭之后自动销毁对象
    //第二步：显示要跳转的界面
    setting->show();
    //第三步：关闭当前的界面,跳转到另一个界面之后，就不能返回原来的界面了
    this->hide();
}

//显示通知
void Widget::on_btn_info_clicked()
{
    //第一步：创建另一个界面的对象
    // new MainWindow 说明创建新界面对象跟当前界面没有关联，不记录它是从哪个界面跳转而来
    infoMW *info = new infoMW(this);
    info->setAttribute(Qt::WA_DeleteOnClose);//关闭之后自动销毁对象
    //第二步：显示要跳转的界面
    info->show();
    //第三步：关闭当前的界面,跳转到另一个界面之后，就不能返回原来的界面了
    this->hide();
}

